// 这是域名
export const API_URI = 'https://hstea.iyoutui.cn/api/'
function fetchApi(type, params, authcode, method) {
    if (authcode !== "") {
        var header = {
            'content-type': "application/json",
            'Authorization': 'Bearer ' + authcode
        }
    } else {
        var header = {
            'content-type': "application/json"
        }
    }
    return new Promise((resolve, reject) => {
        wx.request({
            url: `${API_URI}/${type}`,
            data: params,
            methods: method,
            header: header,
            success: (res)=>{
              if(res.data.code==-1){
                wx.navigateTo({
                  url: '/pages/login/login',
                });
              }else{
                resolve(res);
              }
            },
            fail: reject
        })
    })
}
function encodeUTF8(s) {
    var i, r = [], c, x;
    for (i = 0; i < s.length; i++)
        if ((c = s.charCodeAt(i)) < 0x80) r.push(c);
        else if (c < 0x800) r.push(0xC0 + (c >> 6 & 0x1F), 0x80 + (c & 0x3F));
        else {
            if ((x = c ^ 0xD800) >> 10 == 0) //对四字节UTF-16转换为Unicode
                c = (x << 10) + (s.charCodeAt(++i) ^ 0xDC00) + 0x10000,
                    r.push(0xF0 + (c >> 18 & 0x7), 0x80 + (c >> 12 & 0x3F));
            else r.push(0xE0 + (c >> 12 & 0xF));
            r.push(0x80 + (c >> 6 & 0x3F), 0x80 + (c & 0x3F));
        };
    return r;
}

// 字符串加密成 hex 字符串
function sha1(s) {
    var data = new Uint8Array(encodeUTF8(s))
    var i, j, t;
    var l = ((data.length + 8) >>> 6 << 4) + 16, s = new Uint8Array(l << 2);
    s.set(new Uint8Array(data.buffer)), s = new Uint32Array(s.buffer);
    for (t = new DataView(s.buffer), i = 0; i < l; i++)s[i] = t.getUint32(i << 2);
    s[data.length >> 2] |= 0x80 << (24 - (data.length & 3) * 8);
    s[l - 1] = data.length << 3;
    var w = [], f = [
        function () { return m[1] & m[2] | ~m[1] & m[3]; },
        function () { return m[1] ^ m[2] ^ m[3]; },
        function () { return m[1] & m[2] | m[1] & m[3] | m[2] & m[3]; },
        function () { return m[1] ^ m[2] ^ m[3]; }
    ], rol = function (n, c) { return n << c | n >>> (32 - c); },
        k = [1518500249, 1859775393, -1894007588, -899497514],
        m = [1732584193, -271733879, null, null, -1009589776];
    m[2] = ~m[0], m[3] = ~m[1];
    for (i = 0; i < s.length; i += 16) {
        var o = m.slice(0);
        for (j = 0; j < 80; j++)
            w[j] = j < 16 ? s[i + j] : rol(w[j - 3] ^ w[j - 8] ^ w[j - 14] ^ w[j - 16], 1),
                t = rol(m[0], 5) + f[j / 20 | 0]() + m[4] + w[j] + k[j / 20 | 0] | 0,
                m[1] = rol(m[1], 30), m.pop(), m.unshift(t);
        for (j = 0; j < 5; j++)m[j] = m[j] + o[j] | 0;
    };
    t = new DataView(new Uint32Array(m).buffer);
    for (var i = 0; i < 5; i++)m[i] = t.getUint32(i << 2);

    var hex = Array.prototype.map.call(new Uint8Array(new Uint32Array(m).buffer), function (e) {
        return (e < 16 ? "0" : "") + e.toString(16);
    }).join("");
    return hex;
}
module.exports = {
    auth: function (encryptedData, iv, code) {
        return fetchApi('auth', {
            "encryptedData": encryptedData,
            "iv": iv,
            "code": code
        })
    },
    fetch: function (api, params) {
        let signature = wx.getStorageSync("signature");
        let token = wx.getStorageSync("token");
        let authcode= null;
        if (typeof (signature) === "undefined" || signature == "") {
            
        }else{
            params.signature = signature;
            params.timestamp = Date.parse(new Date()) / 1000;
            authcode = sha1(token + params.timestamp);
        }
        return fetchApi(api, params, authcode, 'GET')
    },
    post: function (api, params) {
        let signature = wx.getStorageSync("signature");
        let token = wx.getStorageSync("token");
        if (typeof (signature) === "undefined" || signature == "") {
            return this.login("/pages/main/main");
        }
        params.signature = signature;
        params.timestamp = Date.parse(new Date()) / 1000;
        let authcode = sha1(token + params.timestamp);
        return fetchApi(api, params, authcode, 'POST')
    },
    API_URI: 'https://hstea.iyoutui.cn/api/',
    login:function(url){
        let _this = this;
        wx.getSetting({
            success(res) {
        if (res.authSetting['scope.userInfo']){
            wx.login({
                success: function (ret) {
                    console.log(this);
                    //wx.setStorageSync('wx_code', ret.code);
                    wx.getUserInfo({
                        lang: "zh_CN",
                        success: (res) => {
                            console.log(this);
                            _this.auth(res.encryptedData, res.iv, ret.code)
                                .then(result => {
                                    console.log(result.data);
                                    wx.hideLoading()
                                    getApp().globalData.userInfo = result.data.data.userInfo;
                                    wx.setStorageSync("userInfo", result.data.data.userInfo);
                                    wx.setStorageSync("token", result.data.data.token);
                                    wx.setStorageSync("signature", result.data.data.signature);
                                    wx.setStorageSync("usertype", result.data.data.userInfo.usertype);
                                    // 0:茶企业 1:茶弄 2:茶工 3:未确定
                                    //_this.navigateBack();
                                    wx.navigateTo({
                                        url: url,
                                    })
                                })
                        }
                    })
                }
            });
        }else{
            wx.navigateTo({
                url: '/pages/login/login',
            })
        }
            }})  
    }
}